package preguntas;



import java.util.Collections;
import java.util.ArrayList;
import java.util.Properties;
import java.util.Random;

import utilidades.PropertiesFile;



public class InsercionDirecta {
	private static ArrayList<Integer>insDir, insDir2, original, arrayObjetivo;
	private static int step=0, pasoAbuscar;


	public static void main(String args[]) {	
		Random rnd = new Random();		
		Properties properties = new PropertiesFile().getProperties();		
		int seed;
		int seedProperty;
		int IDSize;
		String property;		
		
		property=properties.getProperty("IDSize");	
		IDSize=Integer.parseInt(property);			
		
		property=properties.getProperty("seedID");			
		seedProperty=Integer.parseInt(property);
		
		if(seedProperty==-1)
			seed= (int) java.lang.Math.round(Math.random()*999999999+0);
		else
			seed=seedProperty;
		rnd.setSeed(seed);
//////////////////////////////////////////////////////////////////////////////////////////////////
		
		 // Genera array de 100 valores y los mete en aux
		 ArrayList<Integer>aux= new ArrayList<Integer>();
		 for(int i=0;i<99;i++)
			 aux.add(i);		 	
		 Collections.shuffle(aux, rnd);			 

		 insDir= new ArrayList<Integer>();
		 insDir2= new ArrayList<Integer>();
		 original= new ArrayList<Integer>();
		 for(int i=0;i<IDSize;i++){
			 insDir.add(i, aux.get(i));					
			 insDir2.add(i, aux.get(i));
			 original.add(i, aux.get(i));
		 }		
		 
		 System.out.println("Original ");
		 System.out.println(original.toString());
		 
		 insercionDirecta();	
    	
		 pasoAbuscar= 3+(new Random()).nextInt(step-2);
		 System.out.println("Paso que hay que buscar: "+pasoAbuscar);
				 
		 insDir=insDir2;
		 
		 insercionDirecta();	

		 System.out.println();
		 System.out.println("Dados los siguientes datos "+ original.toString()+" , ordene mediante inserci�n directa e introduzca " +
		 		"la secuencia correspondiente al paso " + pasoAbuscar);
		 System.out.println("Soluci�n: " + arrayObjetivo.toString());
	}
	
	
	


	public static void insercionDirecta(){
		
		System.out.println("Insercion Directa: \t\t\t");
		int aux, cambios=0,cambiosAnt=0;
		step=0;
		for(int i=1; i<insDir.size(); i++){			
			aux=(Integer)insDir.get(i);
			int j=i-1;
			
			while(j>=0 && (Integer)insDir.get(j)>aux){
				insDir.set(j+1, insDir.get(j));
				j--;
				cambios++;				
			}
			insDir.set(j+1, aux);
			
			if(cambios!=cambiosAnt){
				step++;
				cambiosAnt=cambios;
			}
			System.out.print(insDir.toString());
			System.out.println("--" +" paso "+ step + "--");	//paso = reordenacion
			
			if(step==pasoAbuscar){
				arrayObjetivo= new ArrayList<Integer>();
				for(int x=0; x<insDir.size(); x++)
					arrayObjetivo.add(x, insDir.get(x));
				
			}			
		}		
	}		
}
